/********************************************************************
 * PROJECT: FOLIAGE PROJECT.
 * SUPPLIER: FOLIAGE TEAM.
 ********************************************************************
 * FILE: TreeNode.java
 * (C) Copyright Foliage Team 2013, All Rights Reserved.
 ********************************************************************/
package org.foliage.common.structure;

/**
 * 一般有序树结点数据结构，父子表现式，且每个结点均带有唯一标识。 定义基本的上下级查询功能功能接口。适用于基本的上下级查询。
 * 
 * @author deathknight0718@gmail.com
 * @version 1.0.0
 */
public interface TreeNode {

	/**
	 * 获取结点唯一标识。
	 * 
	 * @return 结点唯一标识。
	 */
	Object getKey();

	/**
	 * 判断该实例是否存在子结点实例。
	 * 
	 * @return 判断结果。
	 */
	boolean hasChild();

	/**
	 * 获取该实例的父结点实例。
	 * 
	 * @return 父结点实例。
	 */
	TreeNode getParent();

	/**
	 * 根据结点唯一标识获取该结点的对应的子结点实例。
	 * 
	 * @param key 结点唯一标识。
	 * @return 子结点实例。
	 */
	TreeNode getChild(String key);

	/**
	 * 根据指定的子结点序列号获取该实例的子结点实例。
	 * 
	 * @param index 子结点序列号。
	 * @return 子结点实例。
	 */
	TreeNode getChild(int index);

	/**
	 * 获取该实例的所有子结点实例数组。
	 * 
	 * @return 子结点实例数组。
	 */
	TreeNode[] getChildren();

}
